package logic

import (
	Http "../http"
)

// SessionStorage Session存储工具，用于存储Session
// 将Session信息通过文件存储、Redis存储等方式保存到数据持久层
type SessionStorage interface {
	Create(session *Session)                              // 创建Session缓存
	Serialize(session *Session)                           // 序列化session记录到数据持久层
	UnSerialize(session *Session)                         // 反序列化session记录
	Save(session *Session, key string, value interface{}) // 保存单项内容
	Destroy(session *Session)                             // 销毁Session
}

type Session struct {
	Ns      string // namespace of the session
	id      *string
	values  map[string]interface{}
	Expires uint64
}

func BuildSession(request *Http.Request) *Session {
	return &Session{}
}

func (session *Session) SetId(id *string) {
	session.id = id
}

func (session *Session) GetId() string {
	return *session.id
}

func (session *Session) Start() {

}

func (session *Session) Close() {
	for key, _ := range session.values {
		delete(session.values, key)
	}

	session.values = nil
	session.id = nil
	session = nil
}

func (session *Session) Destroy() {
	session.Close()
	// TODO 删除session文件
}

func (session *Session) Set(key string, value interface{}) {
	session.values[key] = value
}

func (session *Session) Get(key string) interface{} {
	if val, ok := session.values[key]; ok {
		return val
	}

	return nil
}

func (session *Session) Remove(key string) {
	if _, ok := session.values[key]; ok {
		delete(session.values, key)
	}
}
